/* eslint-disable implicit-arrow-linebreak */
/**
 * 此示例演示如何使用headless Chrome / PuppeteerPuppeteerCrawler自动填写和提交搜索表单来查找GitHub上的存储库。爬虫首先填写搜索词、存储库所有者、存储库的开始日期和语言，然后提交表单并打印结果。最后，结果要么默认保存在 Apify 平台上，dataset要么以 .json 格式的 JSON 文件保存在本地计算机上./storage/datasets/default。
 */
import { Dataset, launchPuppeteer, log } from 'crawlee';

// 启动网络浏览器。
const browser = await launchPuppeteer();

// 创建并导航新页面
log.info('打开目标页面');
const page = await browser.newPage();
await page.goto('https://github.com/search/advanced');

// 填写表单字段并选择所需的搜索选项
log.info('填写搜索表单');
await page.type('#adv_code_search input.js-advanced-search-input', 'apify-js');
await page.type('#search_from', 'apify');
await page.type('#search_date', '>2015');
await page.select('select#search_language', 'JavaScript');

// 提交表单并等待下一页的完全加载
log.info('提交搜索表单');
await Promise.all([
    page.waitForNavigation({ waitUntil: 'networkidle2' }),
    page.click('#adv_code_search button[type="submit"]'),
]);

// 获取并打印搜索结果列表
const results = await page.$$eval('[data-testid="results-list"] div.search-title > a', (nodes: any[]) =>
    nodes.map((node: any) => ({
        url: node.href,
        name: node.innerText,
    })),
);

log.info('结果:', results);

// 将数据存储在默认数据集中
await Dataset.pushData(results);

// 关闭浏览器
await browser.close();
